<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 第一题 -->
    <!-- <script>
      var x = 10; // 全局作用域中的 x

      function fn() {
        console.log(x); // fn 内部的 x 取决于作用域链
      }

      function show(f) {
        var x = 20; // show 函数的局部作用域中的 x
        f(); // 调用传入的函数 f (即 fn)
      }

      show(fn); // fn 被传递给 show 函数  fn里没有x就找全局的x
    </script> -->

    <!-- 第二题 -->
    <!-- <script>
      var fn = function () {
        console.log(fn);
      };
      fn(); //函数体fn
      var obj = {
        fn2: function () {
          console.log(fn2); //报错 fn2方法内部，fn2 并不是一个可访问的变量或标识符
        },
      };
      obj.fn2();
    </script> -->

    <!-- 第三题 -->
    <!-- <script>
      function fun(num) {
        console.log(num); //10 形参num相当于声明了一个变量 被传参了10
        var num = 5;
        console.log(num);//5 被赋值了5
      }
      fun(10);
    </script> -->

    <!-- 第四题 -->
    <!-- <script>
      function fun(ger) {
        console.log(ger); //打印函数 alert("hello world"); 函数声明提升了 覆盖了5
        function ger() {
          alert("hello world");
        }
      }
      fun(5);
    </script> -->

    <!-- 第五题 -->
    <!-- <script>
      function fun(ger) {
        console.log(ger); //5 函数表达式没有变量提升
        var ger = function () {
          //函数表达式
          alert("hello world");
        };
      }
      fun(5);
    </script> -->

    <!-- 第六题 -->
    <!-- <script>
      function a(b) {
        console.log(b); //b的函数体  函数提升覆盖1
        function b() {
          console.log(b);
        }
        b(); //b的函数体  自己打印自己
      }
      a(1);
    </script> -->

    <!-- 第七题 -->
    <!-- <script>
      function a(b) {
        console.log(b); //1 打印传参
        var b = function () {
          //函数表达式
          console.log(b);//函数体  自己打印自己
        };
        b();
      }
      a(1);
    </script> -->

    <!-- 第八题 -->
    <!-- <script>
      function test(a, b) {
        console.log(a); //a函数体 函数提升
        console.log(b); //undefind 变量提升
        var b = 234;
        console.log(b); //234
        a = 123;
        console.log(a); //123
        function a() {}
        var a;
        b = 234;
        var b = function () {}; //函数表达式  没有提升
        console.log(a); //123
        console.log(b); //b函数体
      }
      test(1);
    </script> -->

    <!-- 第九题 -->
    <!-- <script>
      console.log(test); //函数体 test(test)  函数提升; 
      function test(test) {
        console.log(test); //函数体 test() {} 函数提升
        var test = 234;
        console.log(test); //234
        function test() {}
      }
      test(1);
      var test = 123;
    </script> -->

    <!-- 第十题 -->
    <!-- <script>
      function test() {
        console.log(b); //undefind if是单独的作用域
        if (a) {
          var b = 100;
        }
        c = 234;
        console.log(c); //234  上一行申明的是全局变量
      }
      var a;
      test();//undefind if是单独的作用域
      a = 10;
      test();//234  上一行申明的是全局变量
      console.log(c); //234
    </script> -->

    <!-- 第十一题 -->
    <!-- <script>
      function bar() {
        return foo; //foo() 函数体   函数提升了
        foo = 10;
        function foo() {}
        var foo = 11;
      }
      console.log(bar());
    </script> -->

    <!-- 第十二题 -->
    <!-- <script>
      console.log(bar()); //11  函数提升
      function bar() {
        foo = 10; //全局
        function foo() {} //提升到顶部
        var foo = 11;
        return foo; //11
      }
    </script> -->
  </body>
</html>
